/* Copyright (C) 2010 Fredrique Samuels, fredriquesamuels@gmail.com 

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef _TRI_SHAPES_H_
#define _TRI_SHAPES_H_
 
//Include library header

#include <string>
#include "entity.h"
#include "common.h"

namespace tri{

/**
 * Abstract class defining a baic shape
 */
class TShape: public tri::TEntity{
public:
	/**
	 * Default Constructor
	 */
	TShape();
	
	/**
	 * Destructor
	 */
	virtual ~TShape();
	
	
	virtual void display();
	
protected:
	//global GLU Quadric object used to draw 
	//shapes
	static GLUquadricObj *mQuadricObj;
	static void createGlobalQuadricObj();
	
};

/**
 * Basic Sphere shape
 */
class TSphere : public TShape{
public:
	//class constructor
	TSphere();
	
	//class destructor
	virtual ~TSphere();
	
	//display method
	virtual void display();

    /*
	 *Set the number of slices the sphere
	 *shoulds be devided in to.
	 *
	 * @param s Number of slices
	 */
	void setSlices(int s);
	
	/*
	 *Set the number of stacks the sphere
	 *shoulds be devided in to.
	 *
	 * @param s Number of stacks
	 */
	void setStacks(int s);
	
private:
	int mSlices;
	int mStacks;
	
	
	
};

/**
 * Basic Cube shape
 */
class TCube : public TShape{
public:
	//class constructor
	TCube();
	
	//class destructor
	virtual ~TCube();
	
	//display method
	virtual void display();
	
};


}

#endif
